/**
 * JServer.java    02/03/2012
 */

package l3.info.Projet.Serveur;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import l3.info.Projet.Client.JDAPropos;
import l3.info.Projet.Utilitaires.Configuration;

/**
 * Interface graphique du serveur (permet de le lancer ou de l'arrêter)
 * @author Loïc Martinez
 * @version 1.0
 */

public class JServer extends JFrame implements ActionListener {

	// Variables de classe
	private final static String TITRE = "Serveur";
	private final static int LARGEUR = 290;
	private final static int HAUTEUR = 290;
	private final static int ABSCISSE = 500;
	private final static int ORDONNEE = 200;
	private final static String LANCER = "Lancer";
	private final static String ARRETER = "Arrêter";
	private final static String QUITTER = "Quitter";
	
	private JTextPane textPane;
	private JButton boutonLancement, boutonArret, boutonQuitter;
	private JPanel firstPan, panBouton, panField, panFinal;
	private JMenuBar menuBar;
	private JMenu menuFichier;
	private JMenu menuAide;
	private JMenu menuOption;
	private JMenuItem menuQuitter;
	private JMenuItem menuPreferences;
	private JMenuItem menuAPropos;
	private boolean estLance = false; // Savoir si le serveur est lancé
	private Configuration conf;
	private final static String[] attributsConfig = 
		{"database", "user", "password"};
	
	public JServer() {
		conf = new Configuration("configServer.properties", attributsConfig);
		setProperties();
		getContentPane().setLayout(new FlowLayout());

		// On ajoute les différents composants dans la JFrame
		setButton(FlowLayout.CENTER);
		setArea(FlowLayout.CENTER);
		setQuitButton(FlowLayout.RIGHT);
		setEnter();
		
		setVisible(true);
	}
	
	/**
	 * Configuration des propriétés de la JFrame
	 */
	private void setProperties() {
		// Configuration de la JFrame
		setTitle(TITRE);
		setLocation(ABSCISSE, ORDONNEE);
		setSize(LARGEUR, HAUTEUR);
		setResizable(false);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		addMenuBar();

		// Ajout du 1er JPanel pour qu'il y ait un peu d'espace
		// avec le haut de la JFrame
		firstPan = new JPanel(new FlowLayout());
		firstPan.setPreferredSize(new Dimension(LARGEUR, 10));
		add(firstPan);
	}
	
	/**
	 * Ajoute le menu Fichier, Options, Aide...
	 */
	private void addMenuBar() {
		menuBar = new JMenuBar();
		menuFichier = new JMenu("Fichier");
		menuBar.add(menuFichier);

		menuOption = new JMenu("Options");
		menuBar.add(menuOption);

		menuAide = new JMenu("Aide");
		menuBar.add(menuAide);

		setJMenuBar(menuBar);

		menuQuitter = new JMenuItem("Quitter");
		menuFichier.add(menuQuitter);
		menuQuitter.addActionListener(this);
		
		menuPreferences = new JMenuItem("Préférences");
		menuOption.add(menuPreferences);
		menuPreferences.addActionListener(this);
		
		menuAPropos = new JMenuItem("A propos...");
		menuAide.add(menuAPropos);
		menuAPropos.addActionListener(this);
	}
	
	private void setButton(int alignement) {
		panBouton = new JPanel(new FlowLayout(alignement));
		panBouton.setPreferredSize(new Dimension(LARGEUR, 40));
		
		boutonLancement = new JButton(LANCER);
		panBouton.add(boutonLancement);
		
		boutonArret = new JButton(ARRETER);
		panBouton.add(boutonArret);
		
		boutonLancement.addActionListener(this);
		boutonArret.addActionListener(this);
		
		add(panBouton);
	}
	
	private void setArea(int alignement) {
		panField = new JPanel(new FlowLayout(alignement));
		textPane = new JTextPane();
		textPane.setPreferredSize(new Dimension(240, 100));
		textPane.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		textPane.setEditable(false);
		
		JScrollPane scroll = new JScrollPane(textPane);
		
		panField.add(scroll);
		
		add(panField);
	}
	
	private void setQuitButton(int alignement) {
		panFinal = new JPanel(new FlowLayout(alignement));
		boutonQuitter = new JButton(QUITTER);
		
		panFinal.add(boutonQuitter);
		boutonQuitter.addActionListener(this);
		
		add(panFinal);
	}
	
	/**
	 * Si on appuie sur Entrée, alors on déclenche le listener
	 * du boutonLancement
	 */
	public void setEnter() {
		getRootPane().setDefaultButton(boutonLancement);
	}
	
	public void actionPerformed(ActionEvent ev) {
		if (ev.getSource() == boutonQuitter || ev.getSource() == menuQuitter) {
			dispose();
		} else if (ev.getSource() == boutonLancement) {
			// TODO : Lancer le serveur
			String log = textPane.getText().length() == 0 ? 
					textPane.getText() : textPane.getText() + "\n";
			
			if (!estLance) {
				log += "Serveur lancé !";
				textPane.setText(log);
				estLance = true;
			} else {
				log += "Serveur déjà lancé !";
				textPane.setText(log);
			}
			
		} else if (ev.getSource() == boutonArret) { // TODO : Arrêter le serveur
			String log = textPane.getText().length() == 0 ? 
					textPane.getText() : textPane.getText() + "\n";
			if (estLance) {
				log += "Serveur arrêté !";
				textPane.setText(log);
				estLance = false;
			} else {
				log += "Le serveur n'est pas en fonction !";
				textPane.setText(log);
			}
		} else if (ev.getSource() == menuPreferences) {
			JDPreferencesServeur preferences = new JDPreferencesServeur(conf);
		} else if (ev.getSource() == menuAPropos) {
			JDAPropos aPropos = new JDAPropos("Auteurs : Loic Martinez");
		}
	}

}
